#include "Catapulta.h"

using namespace TP::Juego::Arena::Utilidades;

Catapulta::Catapulta() {
	_rol = new Rol(ROL_CATAPULTA, DESC_UTILIDAD);
	_vida = VIDA_CATAPULTA;
	_posicion = NULL;
	_proyectil = NULL;
	setEsEnemigo(false);
}

Catapulta::~Catapulta() { }

Utilidad* Catapulta::clonar() {
	Utilidad *copia = new Catapulta;
	if (_posicion != NULL) {
		copia->setPosicion(_posicion->clonar());
	}
	return copia;
}

Actor* Catapulta::getProyectil() {
	return this->_proyectil;
}

Actor* Catapulta::setProyectil(Actor* pProyectil) {
	this->_proyectil = pProyectil;
	return pProyectil;
}

TiXmlElement* Catapulta::aElementoXML() {
	TiXmlElement * element = new TiXmlElement(_rol->Nombre().c_str());

	// Serializo los atributos nativos.
	element->SetDoubleAttribute("vida", _vida);
	//element->SetAttribute("puntaje", _puntaje);

	// Serializo la posicion.
	if (NULL != this->_posicion)
		element->LinkEndChild(this->getPosicion()->aElementoXML());
	else
		element->LinkEndChild(new TiXmlElement("NULL"));

	// Serializo el proyectil.
	if (NULL != this->_proyectil)
		element->LinkEndChild(this->getProyectil()->aElementoXML());
	else
		element->LinkEndChild(new TiXmlElement("NULL"));

	return element;
}

void Catapulta::deElementoXML(TiXmlElement* pElemento) {
	if (strcmp(pElemento->Value(), _rol->Nombre().c_str()) == 0) {

		// Hidrato los atributos nativos.
		pElemento->Attribute("vida", &_vida);
		//pElemento->Attribute("puntaje", &_puntaje);

		// Hidrato la posicion.
		this->_posicion = NULL;
		if ("NULL" != pElemento->FirstChildElement()->ValueTStr()) {
			this->setPosicion(new Posicion());
			this->getPosicion()->deElementoXML(pElemento->FirstChildElement());
		}

		// Hidrato el proyectil.
		this->_proyectil = NULL;
		if ("NULL" != pElemento->FirstChildElement()->NextSiblingElement()->ValueTStr())
			this->_proyectil = Actor::deElementoXMLGenerico(pElemento->FirstChildElement()->NextSiblingElement());
	}
}

double Catapulta::getRadio() {
	return radio_catapulta;
}

int Catapulta::getPuntosDestruccion() {
	return PUNTAJE_CATAPULTA;
}